package com.keyue.common.constant;


import com.keyue.common.exception.ErrorInfo;
import lombok.Setter;


/**
 * 请求成功 返回 0
 */
public enum ServerResultCode implements ErrorInfo {
    //成功 "0"
    SUCCESS(0, "成功"),
    FAIL(1000, "系统内部错误,请联系业务系统运维管理员"),
    FIlE_UPLOAD_TOO_LARGE(1051, "上传文件太大,图片文件一般小于2兆"),

    UNAUTHORIZED(401, "登录状态过期"),

    //空指针异常
    NULL_POINT(1001, "空指针异常"),

    //校验异常
    RUN_ERROR(1002, "程序运行报错"),
    ILLEGAL_ARGUMENT(1003, "参数非法"),
    FILED_ERROR(1004, "传入参数错误"),
    PARAM_ERROR(1005, "入参为空"),
    EMPTY_RESULT(1006, "数据不存在"),
    EMPTY_LIST(1007, "查询结果为空"),
    IMG_CAPTCHA_ERROR(1008, "图片验证码错误"),
    IMG_CAPTCHA_EXPIRE_ERROR(1009, "图片验证码不存在或已过期"),
    SMS_CAPTCHA_ERROR(1010, "短信验证码错误"),
    SMS_CAPTCHA_EXPIRE_ERROR(1011, "短信验证码不存在或已过期"),

    //认证授权异常
    UNAUTHENTICATION(401, "未登录"),


    //用户
    USER_NOT_EXIT(20001, "用户不存在"),
    USER_UN_ENABLE(20002, "用户未激活"),


    // 公司
    COMPANY_NOT_EXIT(30001, "公司不存在"),

    // 短信
    SMS_SEND_OVER_LIMIT_ERROR(40001, "发送频次过高，请一分钟后再发送"),
    EMAIL_SEND_OVER_LIMIT_ERROR(40002, "发送频次过高(一天最多修改三次)，请第二天后再发送"),

    // 会员
    MEMBER_PHONE_REGISTER_ERROR(50001, "手机已经被注册使用！"),
    MEMBER_AGREE_AGREEMENT_CHOOSE_ERROR(50002, "必须同意注册协议才可进行注册操作！"),
    MEMBER_CONFIRM_PASSWORD_ERROR(50003, "两次密码输入不一致！"),
    MEMBER_LOGIN_PHONE_ERROR(50004, "手机号没有注册，请注册后登录！"),
    MEMBER_LOGIN_LOCKED_TIME_ERROR(50005, "账号被锁定，请稍后再试试！"),
    MEMBER_RECOVER_PASSWORD_ERROR(50006, "对不起，此密码找回链接已失效！"),
    MEMBER_RECOVER_PASSWORD_EXPIRE_ERROR(50007, "对不起，此密码找回链接已过期！"),

    //产品
    PRODUCT_NOT_EXIST_ERROR(60001, "此商品已下架！"),
    PRODUCT_NOT_MORE_STORE_ERROR(60002, "添加购物车失败，商品库存不足！"),

    //订单
    ORDER_BASE_INFO_EMPTY(70001, "订单基础信息不能为空！"),

    //申请
    APPLY_UNLOCK_FIELD_EXIST(80001, "还有未审批完结的申请，请等上一个申请单完结！"),
    APPLY_NOT_EXIST(80002, "申请单不存在！"),

    //上传图片
    UPLOAD_IMAGES_ERROR(900021, "上传图片失败！"),
    ;


    ServerResultCode(Integer errorCode, String errorDesc) {
        this.errorCode = errorCode;
        this.errorDesc = errorDesc;
    }

    @Setter
    private Integer errorCode;
    @Setter
    private String errorDesc;

    @Override
    public Integer getErrorCode() {
        return this.errorCode;
    }

    @Override
    public String getErrorDesc() {
        return this.errorDesc;
    }

    /**
     * 根据errorCode获得枚举
     *
     * @param errorCode
     * @return
     */
    public static String getDescByCode(Integer errorCode) {
        if (errorCode == null) {
            return null;
        }
        ServerResultCode[] serverResults = values();
        for (ServerResultCode serverResult : serverResults) {
            if (serverResult.getErrorCode().equals(errorCode)) {
                return serverResult.getErrorDesc();
            }
        }
        return null;
    }

}